iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
Modern Web

使用 Clojure 當個 Full-stack 開發者系列 第 4

[Day 4] 超效率之Snippets 必學技巧

  • 分享至 

  • xImage
  •  

開始要動手啦~~~

我是使用VSCode+calva

這個組合可以在本機上使用,或是使用github上的codespaces

codespaces就直接參考我的repo的devcontainer

本機我是使用asdf裝了java,temurin-17的最新版

然後clojure就是安裝最新版

如果你要需要別的版本的話,工具在這

對了,如果用vscode的live share有問題,要多安裝,還有不能訪客登入

再來還有一個重點,Snippets!!!!

結合昨天說的RDD,真的是滿快速的~~

分享幾個我高頻使用到的snippets

  • 快速將定義上一個執行的結果儲存
    在Clojure裡有三個幫你定義好的快捷key,「*1 *2 *3」分別是「上一個執行的值 上上一個執行的值 上上上一個執行的值」XDD
    參考

    所以我將這個快捷建設定成def1,我沒用過*2 3,我都是1用三次
    他做的事很簡單,就是(def $1 *1) <-- $1是vscode的保留字,意思是取代完你的遊標位置

    所以我repl開發,我就能把東西存到記憶體或是覆蓋掉

  • 快速將定義上一個執行的結果儲存x
    跟上一個類似,就是存去x的變數而已
    (def x *1),所以叫defx

  • 再來也是跟第一個類似,但更偷懶,變數也不用打了,只需要選起來就好
    defdbg1 <-- 這名字好難想= =
    (def $TM_SELECTED_TEXT *1) <-- $TM_SELECTED_TEXT vscode的你選取的字

    但這邊的用法比較特別,你需要在將字選起來之後,按F1(Command Palatte),然後insertSnippet

    或是我綁快捷鍵

    {
          "key": "shift+cmd+a",
          "command": "-notification.acceptPrimaryAction",
          "when": "notificationToastsVisible"
    },
    {
          "key": "shift+cmd+a",
          "command": "editor.action.insertSnippet"
    }
    

    選起來(cmd+d/ctrl+w),然後shift+cmd+a,搞定
    (明天會繼續分享calva的快捷鍵)

  • 最後這個就比較複雜了,搭配範例可能清楚一點,因為這是配合Destructuring衍生出來的

    (defn configure [val options]
      (let [{:keys [debug verbose] :or {debug false, verbose false}} options]
        (println "val =" val " debug =" debug " verbose =" verbose)))
    
    (configure 12 {:debug true})
    

    首先,我們要執行(evaluate)options,這樣options就在我們*1裡了
    但我們要拿debug,而options還是個map
    所以直接拿結果解釋(def $TM_SELECTED_TEXT (:$TM_SELECTED_TEXT *1))

    • (:$TM_SELECTED_TEXT *1) <-- 將選取的欄位取值
    • (def $TM_SELECTED_TEXT ... <-- 定義一個選取的字
      ==> 將複製的字當選取欄位的key取出來之後塞給複製的字

    那如果沒有呢?我們就自己看要預設什麼執行在repl,然後用上一招defdbg1

使用方法:

在vscode 按F1 可以呼叫 [Command Palatte]

Command Palatte > Snippets: Configure User Snippets > clojure.json(Clojure)

將以下設定複製貼上或是跟你的整合

完整版設定

{
    "Def last execution result": {
        "prefix": "def1",
        "body": [
            "(def $1 *1)"
        ],
        "description": "Set last value to you defined"
    },
    "Def last execution result to x": {
        "prefix": "defx",
        "body": [
            "(def x *1)"
        ],
        "description": "Set last value to x"
    },
    "Def debugger 1": {
        "prefix": "defdbg1",
        "body": [
            "(def $TM_SELECTED_TEXT *1)"
        ],
        "description": "Def SELECTED_TEXT to *1"
    },
    "Def the SELECTED from last execution result as keys": {
        "prefix": "defkeys",
        "body": [
            "(def $TM_SELECTED_TEXT (:$TM_SELECTED_TEXT *1))"
        ],
        "description": "Def the SELECTED from last execution result as keys"
    }
}

上一篇
[Day 3] 跨越開發界限
下一篇
[Day 5] 括弧來啦
系列文
使用 Clojure 當個 Full-stack 開發者30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言